package parser;

import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import excecao.ExcecaoParser;

public class DicionarioInstrucao {
	
	private static String[] patterns = {
		"(ADD)(#)(,R[0-4];)",
		"(ADD)(#)(,[(]R[0-4][)];)",
		"(SUB)(#)(,R[0-4];)",
		"(SUB)(#)(,[(]R[0-4][)];)",
		"(MOV)(#)(,R[0-4];)",
		"(MOV)(#)(,[(]R[0-4][)];)",
		"(CMP)(#)(,R[0-4];)",
		"(CMP)(#)(,[(]R[0-4][)];)",
		"(AND)(#)(,R[0-4];)",
		"(AND)(#)(,[(]R[0-4][)];)",
		"(OR)(#)(,R[0-4];)",
		"(OR)(#)(,[(]R[0-4][)];)",		
	};  
	
	private static String[] patternsLabel = {
		"(LOOP)([A-Z][A-Z]*);",
		"(BRC)([A-Z][A-Z]*);",
		"(BRE)([A-Z][A-Z]*);",
		"(BRG)([A-Z][A-Z]*);",
		"(BRL)([A-Z][A-Z]*);",
		"(BRN)([A-Z][A-Z]*);",
		"(BRZ)([A-Z][A-Z]*);",
		"(JMP)([A-Z][A-Z]*);",
		"(JPE)([A-Z][A-Z]*);",
		"(JPO)([A-Z][A-Z]*);",		
		"(J[N]?[A|B|G|L]?E)([A-Z][A-Z]*);",
		"(J[N]?[A|B|C|G|L|O|P|S|Z])([A-Z][A-Z]*);"				
	};	
	
	private static String patternBin = "-?[0-1][0-1]*B";
	private static String patternOct = "-?[0-7][0-7]*O";	
	private static String patternDec = "-?[0-9][0-9]*[D]?"; 
	private static String patternHex = "-?[0-9A-F][0-9A-F]*H";
	
	private static HashMap<String, Instrucao> instrucao;
	private static DicionarioInstrucao instancia = null;
	
	private DicionarioInstrucao(){
		instrucao = new HashMap<String, Instrucao>();
		
		carregaInstrucoes();
	}
	
	public static void criaInstancia(){
		if (instancia == null){
			instancia = new DicionarioInstrucao();
		}
	}	
	
	public static DicionarioInstrucao getInstancia(){
		return instancia;
	}
	
	public static String filtro(String str){
		String r = str.trim().toUpperCase().replaceAll(" ", "").replaceAll("\n", "").replaceAll("\t", "");
		if (r == "" || r == ";"){
			r = null;
		}
		return r;
	}
	
	public static Instrucao getInstrucao(String inst) throws ExcecaoParser{		
		Codigo codigo = null;
		String key = filtro(inst);		

		if (instrucao.containsKey(key)){
			return new Instrucao(instrucao.get(key), null, null);
		}
		
		codigo = getImediato(key);
		if (codigo != null && instrucao.containsKey(codigo.getInstrucao())){
			return new Instrucao(instrucao.get(codigo.getInstrucao()), codigo.getValor(), null);
		}
		
		codigo = getLabel(key);
		if (codigo != null && instrucao.containsKey(codigo.getInstrucao())){
			return new Instrucao(instrucao.get(codigo.getInstrucao()), null, codigo.getDesvio());
		}
		
		throw new ExcecaoParser("Instrução inexistente - " + inst);
	}
	
	private static Codigo getLabel(String key){
		Pattern pattern;
		Matcher matcher;
		
		for (String p : patternsLabel){
			pattern = Pattern.compile(p);
			matcher = pattern.matcher(key);
			if (matcher.find()){
				String label = matcher.group(2);				
				String instrucao = key.replace(matcher.group(2), "#");
				return new Codigo(instrucao, label); 
			}
		}
		
		return null;
	}
	
	private static Codigo getImediato(String key){
		Pattern pattern;
		Matcher matcher;
		
		for (String p : patterns){
			// Imediato binário
			String p2 = new String(p);
			pattern = Pattern.compile(p2.replaceFirst("#", patternBin));
			matcher = pattern.matcher(key);
			if (matcher.find()){
				Integer valor = Integer.parseInt(matcher.group(2).replace("B", ""), 2);				
				String instrucao = key.replaceFirst(matcher.group(2), "#");
				return new Codigo(instrucao, valor); 
			}
			// Imediato octal
			String p8 = new String(p);
			pattern = Pattern.compile(p8.replaceFirst("#", patternOct));
			matcher = pattern.matcher(key);
			if (matcher.find()){
				Integer valor = Integer.parseInt(matcher.group(2).replace("O", ""), 8);				
				String instrucao = key.replaceFirst(matcher.group(2), "#");
				return new Codigo(instrucao, valor); 
			}			
			// Imediato decimal
			String p10 = new String(p);
			pattern = Pattern.compile(p10.replaceFirst("#", patternDec));
			matcher = pattern.matcher(key);
			if (matcher.find()){
				Integer valor = Integer.parseInt(matcher.group(2).replace("D", ""));				
				String instrucao = key.replaceFirst(matcher.group(2), "#");
				return new Codigo(instrucao, valor); 
			}			
			// Imediato hexadecimal
			String p16 = new String(p);
			pattern = Pattern.compile(p16.replaceFirst("#", patternHex));
			matcher = pattern.matcher(key);
			if (matcher.find()){
				Integer valor = Integer.parseInt(matcher.group(2).replace("H", ""), 16);				
				String instrucao = key.replaceFirst(matcher.group(2), "#");
				return new Codigo(instrucao, valor); 
			}						
		}		
		return null;		
	}
	
	public static String getNomeInstrucao(String codInstrucao){
		for (String key : instrucao.keySet()){
			if (instrucao.get(key).getCodigo().equals(codInstrucao)){
				return instrucao.get(key).getNome();
			}
		}
		
		return null;
	}
	
	private static void carregaInstrucoes(){
		instrucao.put("ADD#,(R0);", new Instrucao("00000000001010001010", "ADD #, (R0); "));
		instrucao.put("ADD#,(R1);", new Instrucao("00000000000000100101", "ADD #, (R1); "));
		instrucao.put("ADD#,(R2);", new Instrucao("00000000001001000010", "ADD #, (R2); "));
		instrucao.put("ADD#,(R3);", new Instrucao("00000000000101100110", "ADD #, (R3); "));
		instrucao.put("ADD#,(R4);", new Instrucao("00000000000101000000", "ADD #, (R4); "));
		instrucao.put("ADD#,R0;", new Instrucao("00000000000011110000", "ADD #, R0; "));
		instrucao.put("ADD#,R1;", new Instrucao("00000000000011001010", "ADD #, R1; "));
		instrucao.put("ADD#,R2;", new Instrucao("00000000000111010000", "ADD #, R2; "));
		instrucao.put("ADD#,R3;", new Instrucao("00000000000011000111", "ADD #, R3; "));
		instrucao.put("ADD#,R4;", new Instrucao("00000000000110101101", "ADD #, R4; "));
		instrucao.put("ADD(R0),(R0);", new Instrucao("00000000000001010001", "ADD (R0), (R0); "));
		instrucao.put("ADD(R0),(R1);", new Instrucao("00000000000110000101", "ADD (R0), (R1); "));
		instrucao.put("ADD(R0),(R2);", new Instrucao("00000000001011000010", "ADD (R0), (R2); "));
		instrucao.put("ADD(R0),(R3);", new Instrucao("00000000001000000100", "ADD (R0), (R3); "));
		instrucao.put("ADD(R0),(R4);", new Instrucao("00000000000001001111", "ADD (R0), (R4); "));
		instrucao.put("ADD(R0),R0;", new Instrucao("00000000000101111101", "ADD (R0), R0; "));
		instrucao.put("ADD(R0),R1;", new Instrucao("00000000000001111110", "ADD (R0), R1; "));
		instrucao.put("ADD(R0),R2;", new Instrucao("00000000000010101001", "ADD (R0), R2; "));
		instrucao.put("ADD(R0),R3;", new Instrucao("00000000000010101101", "ADD (R0), R3; "));
		instrucao.put("ADD(R0),R4;", new Instrucao("00000000000001111101", "ADD (R0), R4; "));
		instrucao.put("ADD(R1),(R0);", new Instrucao("00000000000001101111", "ADD (R1), (R0); "));
		instrucao.put("ADD(R1),(R1);", new Instrucao("00000000001010101001", "ADD (R1), (R1); "));
		instrucao.put("ADD(R1),(R2);", new Instrucao("00000000000011001000", "ADD (R1), (R2); "));
		instrucao.put("ADD(R1),(R3);", new Instrucao("00000000000110000010", "ADD (R1), (R3); "));
		instrucao.put("ADD(R1),(R4);", new Instrucao("00000000000011110001", "ADD (R1), (R4); "));
		instrucao.put("ADD(R1),R0;", new Instrucao("00000000000110110111", "ADD (R1), R0; "));
		instrucao.put("ADD(R1),R1;", new Instrucao("00000000000110100111", "ADD (R1), R1; "));
		instrucao.put("ADD(R1),R2;", new Instrucao("00000000000110110010", "ADD (R1), R2; "));
		instrucao.put("ADD(R1),R3;", new Instrucao("00000000001010000101", "ADD (R1), R3; "));
		instrucao.put("ADD(R1),R4;", new Instrucao("00000000001010001111", "ADD (R1), R4; "));
		instrucao.put("ADD(R2),(R0);", new Instrucao("00000000001010100001", "ADD (R2), (R0); "));
		instrucao.put("ADD(R2),(R1);", new Instrucao("00000000000000111011", "ADD (R2), (R1); "));
		instrucao.put("ADD(R2),(R2);", new Instrucao("00000000001001011101", "ADD (R2), (R2); "));
		instrucao.put("ADD(R2),(R3);", new Instrucao("00000000000110001111", "ADD (R2), (R3); "));
		instrucao.put("ADD(R2),(R4);", new Instrucao("00000000000101100001", "ADD (R2), (R4); "));
		instrucao.put("ADD(R2),R0;", new Instrucao("00000000000010100101", "ADD (R2), R0; "));
		instrucao.put("ADD(R2),R1;", new Instrucao("00000000000010000010", "ADD (R2), R1; "));
		instrucao.put("ADD(R2),R2;", new Instrucao("00000000000101111010", "ADD (R2), R2; "));
		instrucao.put("ADD(R2),R3;", new Instrucao("00000000000001111010", "ADD (R2), R3; "));
		instrucao.put("ADD(R2),R4;", new Instrucao("00000000000101010110", "ADD (R2), R4; "));
		instrucao.put("ADD(R3),(R0);", new Instrucao("00000000000110111000", "ADD (R3), (R0); "));
		instrucao.put("ADD(R3),(R1);", new Instrucao("00000000000010111011", "ADD (R3), (R1); "));
		instrucao.put("ADD(R3),(R2);", new Instrucao("00000000001011101011", "ADD (R3), (R2); "));
		instrucao.put("ADD(R3),(R3);", new Instrucao("00000000001011100011", "ADD (R3), (R3); "));
		instrucao.put("ADD(R3),(R4);", new Instrucao("00000000000111111000", "ADD (R3), (R4); "));
		instrucao.put("ADD(R3),R0;", new Instrucao("00000000000100001110", "ADD (R3), R0; "));
		instrucao.put("ADD(R3),R1;", new Instrucao("00000000000000111000", "ADD (R3), R1; "));
		instrucao.put("ADD(R3),R2;", new Instrucao("00000000000011111010", "ADD (R3), R2; "));
		instrucao.put("ADD(R3),R3;", new Instrucao("00000000000100000100", "ADD (R3), R3; "));
		instrucao.put("ADD(R3),R4;", new Instrucao("00000000000000101100", "ADD (R3), R4; "));
		instrucao.put("ADD(R4),(R0);", new Instrucao("00000000001011001111", "ADD (R4), (R0); "));
		instrucao.put("ADD(R4),(R1);", new Instrucao("00000000001001000101", "ADD (R4), (R1); "));
		instrucao.put("ADD(R4),(R2);", new Instrucao("00000000001100100011", "ADD (R4), (R2); "));
		instrucao.put("ADD(R4),(R3);", new Instrucao("00000000000010110010", "ADD (R4), (R3); "));
		instrucao.put("ADD(R4),(R4);", new Instrucao("00000000001011111010", "ADD (R4), (R4); "));
		instrucao.put("ADD(R4),R0;", new Instrucao("00000000000110110101", "ADD (R4), R0; "));
		instrucao.put("ADD(R4),R1;", new Instrucao("00000000001010011110", "ADD (R4), R1; "));
		instrucao.put("ADD(R4),R2;", new Instrucao("00000000001010000010", "ADD (R4), R2; "));
		instrucao.put("ADD(R4),R3;", new Instrucao("00000000001010000110", "ADD (R4), R3; "));
		instrucao.put("ADD(R4),R4;", new Instrucao("00000000000111001101", "ADD (R4), R4; "));
		instrucao.put("ADDR0,(R0);", new Instrucao("00000000000000101111", "ADD R0, (R0); "));
		instrucao.put("ADDR0,(R1);", new Instrucao("00000000001010111100", "ADD R0, (R1); "));
		instrucao.put("ADDR0,(R2);", new Instrucao("00000000000011011001", "ADD R0, (R2); "));
		instrucao.put("ADDR0,(R3);", new Instrucao("00000000000110010110", "ADD R0, (R3); "));
		instrucao.put("ADDR0,(R4);", new Instrucao("00000000000001100111", "ADD R0, (R4); "));
		instrucao.put("ADDR0,R0;", new Instrucao("00000000000001000011", "ADD R0, R0; "));
		instrucao.put("ADDR0,R1;", new Instrucao("00000000001010111111", "ADD R0, R1; "));
		instrucao.put("ADDR0,R2;", new Instrucao("00000000000101000001", "ADD R0, R2; "));
		instrucao.put("ADDR0,R3;", new Instrucao("00000000000000101001", "ADD R0, R3; "));
		instrucao.put("ADDR0,R4;", new Instrucao("00000000001011000000", "ADD R0, R4; "));
		instrucao.put("ADDR1,(R0);", new Instrucao("00000000000110010011", "ADD R1, (R0); "));
		instrucao.put("ADDR1,(R1);", new Instrucao("00000000001011100000", "ADD R1, (R1); "));
		instrucao.put("ADDR1,(R2);", new Instrucao("00000000000001111001", "ADD R1, (R2); "));
		instrucao.put("ADDR1,(R3);", new Instrucao("00000000001100100111", "ADD R1, (R3); "));
		instrucao.put("ADDR1,(R4);", new Instrucao("00000000000011101111", "ADD R1, (R4); "));
		instrucao.put("ADDR1,R0;", new Instrucao("00000000000111001000", "ADD R1, R0; "));
		instrucao.put("ADDR1,R1;", new Instrucao("00000000000011110101", "ADD R1, R1; "));
		instrucao.put("ADDR1,R2;", new Instrucao("00000000000011100110", "ADD R1, R2; "));
		instrucao.put("ADDR1,R3;", new Instrucao("00000000001010010011", "ADD R1, R3; "));
		instrucao.put("ADDR1,R4;", new Instrucao("00000000000011110011", "ADD R1, R4; "));
		instrucao.put("ADDR2,(R0);", new Instrucao("00000000000000111110", "ADD R2, (R0); "));
		instrucao.put("ADDR2,(R1);", new Instrucao("00000000000011101101", "ADD R2, (R1); "));
		instrucao.put("ADDR2,(R2);", new Instrucao("00000000001100101101", "ADD R2, (R2); "));
		instrucao.put("ADDR2,(R3);", new Instrucao("00000000001000110010", "ADD R2, (R3); "));
		instrucao.put("ADDR2,(R4);", new Instrucao("00000000001100010011", "ADD R2, (R4); "));
		instrucao.put("ADDR2,R0;", new Instrucao("00000000000111000000", "ADD R2, R0; "));
		instrucao.put("ADDR2,R1;", new Instrucao("00000000000110111100", "ADD R2, R1; "));
		instrucao.put("ADDR2,R2;", new Instrucao("00000000000111010111", "ADD R2, R2; "));
		instrucao.put("ADDR2,R3;", new Instrucao("00000000001010111001", "ADD R2, R3; "));
		instrucao.put("ADDR2,R4;", new Instrucao("00000000000011101011", "ADD R2, R4; "));
		instrucao.put("ADDR3,(R0);", new Instrucao("00000000000100010010", "ADD R3, (R0); "));
		instrucao.put("ADDR3,(R1);", new Instrucao("00000000000111100000", "ADD R3, (R1); "));
		instrucao.put("ADDR3,(R2);", new Instrucao("00000000000010001101", "ADD R3, (R2); "));
		instrucao.put("ADDR3,(R3);", new Instrucao("00000000001100100100", "ADD R3, (R3); "));
		instrucao.put("ADDR3,(R4);", new Instrucao("00000000000001100101", "ADD R3, (R4); "));
		instrucao.put("ADDR3,R0;", new Instrucao("00000000000001110001", "ADD R3, R0; "));
		instrucao.put("ADDR3,R1;", new Instrucao("00000000000001110100", "ADD R3, R1; "));
		instrucao.put("ADDR3,R2;", new Instrucao("00000000001100001001", "ADD R3, R2; "));
		instrucao.put("ADDR3,R3;", new Instrucao("00000000000001001101", "ADD R3, R3; "));
		instrucao.put("ADDR3,R4;", new Instrucao("00000000000100111110", "ADD R3, R4; "));
		instrucao.put("ADDR4,(R0);", new Instrucao("00000000000111011001", "ADD R4, (R0); "));
		instrucao.put("ADDR4,(R1);", new Instrucao("00000000001010100010", "ADD R4, (R1); "));
		instrucao.put("ADDR4,(R2);", new Instrucao("00000000000101011001", "ADD R4, (R2); "));
		instrucao.put("ADDR4,(R3);", new Instrucao("00000000000001010101", "ADD R4, (R3); "));
		instrucao.put("ADDR4,(R4);", new Instrucao("00000000000101110000", "ADD R4, (R4); "));
		instrucao.put("ADDR4,R0;", new Instrucao("00000000001000001001", "ADD R4, R0; "));
		instrucao.put("ADDR4,R1;", new Instrucao("00000000000101000010", "ADD R4, R1; "));
		instrucao.put("ADDR4,R2;", new Instrucao("00000000001100010000", "ADD R4, R2; "));
		instrucao.put("ADDR4,R3;", new Instrucao("00000000001011111111", "ADD R4, R3; "));
		instrucao.put("ADDR4,R4;", new Instrucao("00000000000100100010", "ADD R4, R4; "));
		instrucao.put("AND#,(R0);", new Instrucao("00000000001100011100", "AND #, (R0); "));
		instrucao.put("AND#,(R1);", new Instrucao("00000000000011010100", "AND #, (R1); "));
		instrucao.put("AND#,(R2);", new Instrucao("00000000000111111110", "AND #, (R2); "));
		instrucao.put("AND#,(R3);", new Instrucao("00000000000100111011", "AND #, (R3); "));
		instrucao.put("AND#,(R4);", new Instrucao("00000000001000011111", "AND #, (R4); "));
		instrucao.put("AND#,R0;", new Instrucao("00000000001010101100", "AND #, R0; "));
		instrucao.put("AND#,R1;", new Instrucao("00000000000110100110", "AND #, R1; "));
		instrucao.put("AND#,R2;", new Instrucao("00000000000111001110", "AND #, R2; "));
		instrucao.put("AND#,R3;", new Instrucao("00000000000110101010", "AND #, R3; "));
		instrucao.put("AND#,R4;", new Instrucao("00000000000110101110", "AND #, R4; "));
		instrucao.put("AND(R0),(R0);", new Instrucao("00000000001100000011", "AND (R0), (R0); "));
		instrucao.put("AND(R0),(R1);", new Instrucao("00000000000010100011", "AND (R0), (R1); "));
		instrucao.put("AND(R0),(R2);", new Instrucao("00000000001010111110", "AND (R0), (R2); "));
		instrucao.put("AND(R0),(R3);", new Instrucao("00000000001000100110", "AND (R0), (R3); "));
		instrucao.put("AND(R0),(R4);", new Instrucao("00000000000111010010", "AND (R0), (R4); "));
		instrucao.put("AND(R0),R0;", new Instrucao("00000000000100001101", "AND (R0), R0; "));
		instrucao.put("AND(R0),R1;", new Instrucao("00000000000011100111", "AND (R0), R1; "));
		instrucao.put("AND(R0),R2;", new Instrucao("00000000000111100100", "AND (R0), R2; "));
		instrucao.put("AND(R0),R3;", new Instrucao("00000000000011011111", "AND (R0), R3; "));
		instrucao.put("AND(R0),R4;", new Instrucao("00000000000111001011", "AND (R0), R4; "));
		instrucao.put("AND(R1),(R0);", new Instrucao("00000000001000101110", "AND (R1), (R0); "));
		instrucao.put("AND(R1),(R1);", new Instrucao("00000000000100100001", "AND (R1), (R1); "));
		instrucao.put("AND(R1),(R2);", new Instrucao("00000000001010010110", "AND (R1), (R2); "));
		instrucao.put("AND(R1),(R3);", new Instrucao("00000000001101001111", "AND (R1), (R3); "));
		instrucao.put("AND(R1),(R4);", new Instrucao("00000000001001101000", "AND (R1), (R4); "));
		instrucao.put("AND(R1),R0;", new Instrucao("00000000001010011100", "AND (R1), R0; "));
		instrucao.put("AND(R1),R1;", new Instrucao("00000000000010011111", "AND (R1), R1; "));
		instrucao.put("AND(R1),R2;", new Instrucao("00000000000101101000", "AND (R1), R2; "));
		instrucao.put("AND(R1),R3;", new Instrucao("00000000000101110011", "AND (R1), R3; "));
		instrucao.put("AND(R1),R4;", new Instrucao("00000000000010010100", "AND (R1), R4; "));
		instrucao.put("AND(R2),(R0);", new Instrucao("00000000000010111001", "AND (R2), (R0); "));
		instrucao.put("AND(R2),(R1);", new Instrucao("00000000000111110011", "AND (R2), (R1); "));
		instrucao.put("AND(R2),(R2);", new Instrucao("00000000001100110101", "AND (R2), (R2); "));
		instrucao.put("AND(R2),(R3);", new Instrucao("00000000001001110111", "AND (R2), (R3); "));
		instrucao.put("AND(R2),(R4);", new Instrucao("00000000000010110111", "AND (R2), (R4); "));
		instrucao.put("AND(R2),R0;", new Instrucao("00000000000111100110", "AND (R2), R0; "));
		instrucao.put("AND(R2),R1;", new Instrucao("00000000000011100100", "AND (R2), R1; "));
		instrucao.put("AND(R2),R2;", new Instrucao("00000000000100010000", "AND (R2), R2; "));
		instrucao.put("AND(R2),R3;", new Instrucao("00000000000100010100", "AND (R2), R3; "));
		instrucao.put("AND(R2),R4;", new Instrucao("00000000000011100010", "AND (R2), R4; "));
		instrucao.put("AND(R3),(R0);", new Instrucao("00000000000011010111", "AND (R3), (R0); "));
		instrucao.put("AND(R3),(R1);", new Instrucao("00000000000111000011", "AND (R3), (R1); "));
		instrucao.put("AND(R3),(R2);", new Instrucao("00000000000100111010", "AND (R3), (R2); "));
		instrucao.put("AND(R3),(R3);", new Instrucao("00000000000111101111", "AND (R3), (R3); "));
		instrucao.put("AND(R3),(R4);", new Instrucao("00000000000101011111", "AND (R3), (R4); "));
		instrucao.put("AND(R3),R0;", new Instrucao("00000000001000101011", "AND (R3), R0; "));
		instrucao.put("AND(R3),R1;", new Instrucao("00000000001000010111", "AND (R3), R1; "));
		instrucao.put("AND(R3),R2;", new Instrucao("00000000001000100010", "AND (R3), R2; "));
		instrucao.put("AND(R3),R3;", new Instrucao("00000000001011101001", "AND (R3), R3; "));
		instrucao.put("AND(R3),R4;", new Instrucao("00000000001011110010", "AND (R3), R4; "));
		instrucao.put("AND(R4),(R0);", new Instrucao("00000000001011111001", "AND (R4), (R0); "));
		instrucao.put("AND(R4),(R1);", new Instrucao("00000000001001000110", "AND (R4), (R1); "));
		instrucao.put("AND(R4),(R2);", new Instrucao("00000000000100011101", "AND (R4), (R2); "));
		instrucao.put("AND(R4),(R3);", new Instrucao("00000000000110101111", "AND (R4), (R3); "));
		instrucao.put("AND(R4),(R4);", new Instrucao("00000000000011000110", "AND (R4), (R4); "));
		instrucao.put("AND(R4),R0;", new Instrucao("00000000000100100000", "AND (R4), R0; "));
		instrucao.put("AND(R4),R1;", new Instrucao("00000000000100010110", "AND (R4), R1; "));
		instrucao.put("AND(R4),R2;", new Instrucao("00000000000001010010", "AND (R4), R2; "));
		instrucao.put("AND(R4),R3;", new Instrucao("00000000000100101010", "AND (R4), R3; "));
		instrucao.put("AND(R4),R4;", new Instrucao("00000000000001101101", "AND (R4), R4; "));
		instrucao.put("ANDR0,(R0);", new Instrucao("00000000000101000111", "AND R0, (R0); "));
		instrucao.put("ANDR0,(R1);", new Instrucao("00000000001000000101", "AND R0, (R1); "));
		instrucao.put("ANDR0,(R2);", new Instrucao("00000000000010010110", "AND R0, (R2); "));
		instrucao.put("ANDR0,(R3);", new Instrucao("00000000001100110000", "AND R0, (R3); "));
		instrucao.put("ANDR0,(R4);", new Instrucao("00000000000010001100", "AND R0, (R4); "));
		instrucao.put("ANDR0,R0;", new Instrucao("00000000000000111100", "AND R0, R0; "));
		instrucao.put("ANDR0,R1;", new Instrucao("00000000000000101101", "AND R0, R1; "));
		instrucao.put("ANDR0,R2;", new Instrucao("00000000000000111001", "AND R0, R2; "));
		instrucao.put("ANDR0,R3;", new Instrucao("00000000001010100101", "AND R0, R3; "));
		instrucao.put("ANDR0,R4;", new Instrucao("00000000001010110100", "AND R0, R4; "));
		instrucao.put("ANDR1,(R0);", new Instrucao("00000000000000000001", "AND R1, (R0); "));
		instrucao.put("ANDR1,(R1);", new Instrucao("00000000000011101110", "AND R1, (R1); "));
		instrucao.put("ANDR1,(R2);", new Instrucao("00000000001000011101", "AND R1, (R2); "));
		instrucao.put("ANDR1,(R3);", new Instrucao("00000000000101100010", "AND R1, (R3); "));
		instrucao.put("ANDR1,(R4);", new Instrucao("00000000000111111111", "AND R1, (R4); "));
		instrucao.put("ANDR1,R0;", new Instrucao("00000000000001101001", "AND R1, R0; "));
		instrucao.put("ANDR1,R1;", new Instrucao("00000000000001011111", "AND R1, R1; "));
		instrucao.put("ANDR1,R2;", new Instrucao("00000000000100111101", "AND R1, R2; "));
		instrucao.put("ANDR1,R3;", new Instrucao("00000000000001110010", "AND R1, R3; "));
		instrucao.put("ANDR1,R4;", new Instrucao("00000000000100110110", "AND R1, R4; "));
		instrucao.put("ANDR2,(R0);", new Instrucao("00000000001010100100", "AND R2, (R0); "));
		instrucao.put("ANDR2,(R1);", new Instrucao("00000000000111010011", "AND R2, (R1); "));
		instrucao.put("ANDR2,(R2);", new Instrucao("00000000000010111111", "AND R2, (R2); "));
		instrucao.put("ANDR2,(R3);", new Instrucao("00000000000110010010", "AND R2, (R3); "));
		instrucao.put("ANDR2,(R4);", new Instrucao("00000000001100000000", "AND R2, (R4); "));
		instrucao.put("ANDR2,R0;", new Instrucao("00000000001011011000", "AND R2, R0; "));
		instrucao.put("ANDR2,R1;", new Instrucao("00000000000111011100", "AND R2, R1; "));
		instrucao.put("ANDR2,R2;", new Instrucao("00000000001011011101", "AND R2, R2; "));
		instrucao.put("ANDR2,R3;", new Instrucao("00000000001011001100", "AND R2, R3; "));
		instrucao.put("ANDR2,R4;", new Instrucao("00000000001000010000", "AND R2, R4; "));
		instrucao.put("ANDR3,(R0);", new Instrucao("00000000000001001010", "AND R3, (R0); "));
		instrucao.put("ANDR3,(R1);", new Instrucao("00000000000011011011", "AND R3, (R1); "));
		instrucao.put("ANDR3,(R2);", new Instrucao("00000000001000100101", "AND R3, (R2); "));
		instrucao.put("ANDR3,(R3);", new Instrucao("00000000000101011010", "AND R3, (R3); "));
		instrucao.put("ANDR3,(R4);", new Instrucao("00000000001100010100", "AND R3, (R4); "));
		instrucao.put("ANDR3,R0;", new Instrucao("00000000000111101101", "AND R3, R0; "));
		instrucao.put("ANDR3,R1;", new Instrucao("00000000000011101001", "AND R3, R1; "));
		instrucao.put("ANDR3,R2;", new Instrucao("00000000000100010011", "AND R3, R2; "));
		instrucao.put("ANDR3,R3;", new Instrucao("00000000000100001001", "AND R3, R3; "));
		instrucao.put("ANDR3,R4;", new Instrucao("00000000000011110110", "AND R3, R4; "));
		instrucao.put("ANDR4,(R0);", new Instrucao("00000000000010111100", "AND R4, (R0); "));
		instrucao.put("ANDR4,(R1);", new Instrucao("00000000001100010010", "AND R4, (R1); "));
		instrucao.put("ANDR4,(R2);", new Instrucao("00000000000100110001", "AND R4, (R2); "));
		instrucao.put("ANDR4,(R3);", new Instrucao("00000000000111110111", "AND R4, (R3); "));
		instrucao.put("ANDR4,(R4);", new Instrucao("00000000001001011001", "AND R4, (R4); "));
		instrucao.put("ANDR4,R0;", new Instrucao("00000000001010010000", "AND R4, R0; "));
		instrucao.put("ANDR4,R1;", new Instrucao("00000000001010011111", "AND R4, R1; "));
		instrucao.put("ANDR4,R2;", new Instrucao("00000000001001101101", "AND R4, R2; "));
		instrucao.put("ANDR4,R3;", new Instrucao("00000000000000011000", "AND R4, R3; "));
		instrucao.put("ANDR4,R4;", new Instrucao("00000000001100111100", "AND R4, R4; "));
		instrucao.put("BRC#;", new Instrucao("00000000000011001001", "BRC #; "));
		instrucao.put("BRE#;", new Instrucao("00000000001001001111", "BRE #; "));
		instrucao.put("BRG#;", new Instrucao("00000000001010000100", "BRG #; "));
		instrucao.put("BRL#;", new Instrucao("00000000000110000011", "BRL #; "));
		instrucao.put("BRN#;", new Instrucao("00000000001001001110", "BRN #; "));
		instrucao.put("BRZ#;", new Instrucao("00000000000011000000", "BRZ #; "));
		instrucao.put("CLF;", new Instrucao("00000000000011011101", "CLF; "));
		instrucao.put("CLR(R0);", new Instrucao("00000000000111010001", "CLR (R0); "));
		instrucao.put("CLR(R1);", new Instrucao("00000000001001101110", "CLR (R1); "));
		instrucao.put("CLR(R2);", new Instrucao("00000000000100101101", "CLR (R2); "));
		instrucao.put("CLR(R3);", new Instrucao("00000000000000110011", "CLR (R3); "));
		instrucao.put("CLR(R4);", new Instrucao("00000000000001101010", "CLR (R4); "));
		instrucao.put("CLRR0;", new Instrucao("00000000001001110101", "CLR R0; "));
		instrucao.put("CLRR1;", new Instrucao("00000000001010000000", "CLR R1; "));
		instrucao.put("CLRR2;", new Instrucao("00000000001011101101", "CLR R2; "));
		instrucao.put("CLRR3;", new Instrucao("00000000001000010100", "CLR R3; "));
		instrucao.put("CLRR4;", new Instrucao("00000000000110011010", "CLR R4; "));
		instrucao.put("CMP#,(R0);", new Instrucao("00000000000110100101", "CMP #, (R0); "));
		instrucao.put("CMP#,(R1);", new Instrucao("00000000000100100011", "CMP #, (R1); "));
		instrucao.put("CMP#,(R2);", new Instrucao("00000000001011011110", "CMP #, (R2); "));
		instrucao.put("CMP#,(R3);", new Instrucao("00000000000001000010", "CMP #, (R3); "));
		instrucao.put("CMP#,(R4);", new Instrucao("00000000000101010001", "CMP #, (R4); "));
		instrucao.put("CMP#,R0;", new Instrucao("00000000001001010001", "CMP #, R0; "));
		instrucao.put("CMP#,R1;", new Instrucao("00000000001001111001", "CMP #, R1; "));
		instrucao.put("CMP#,R2;", new Instrucao("00000000001001001101", "CMP #, R2; "));
		instrucao.put("CMP#,R3;", new Instrucao("00000000001101000111", "CMP #, R3; "));
		instrucao.put("CMP#,R4;", new Instrucao("00000000001100100001", "CMP #, R4; "));
		instrucao.put("CMP(R0),(R0);", new Instrucao("00000000000110101100", "CMP (R0), (R0); "));
		instrucao.put("CMP(R0),(R1);", new Instrucao("00000000000101011101", "CMP (R0), (R1); "));
		instrucao.put("CMP(R0),(R2);", new Instrucao("00000000001100011000", "CMP (R0), (R2); "));
		instrucao.put("CMP(R0),(R3);", new Instrucao("00000000000001001000", "CMP (R0), (R3); "));
		instrucao.put("CMP(R0),(R4);", new Instrucao("00000000001100000111", "CMP (R0), (R4); "));
		instrucao.put("CMP(R0),R0;", new Instrucao("00000000000011111111", "CMP (R0), R0; "));
		instrucao.put("CMP(R0),R1;", new Instrucao("00000000000011111100", "CMP (R0), R1; "));
		instrucao.put("CMP(R0),R2;", new Instrucao("00000000000100000111", "CMP (R0), R2; "));
		instrucao.put("CMP(R0),R3;", new Instrucao("00000000000100110100", "CMP (R0), R3; "));
		instrucao.put("CMP(R0),R4;", new Instrucao("00000000000111101100", "CMP (R0), R4; "));
		instrucao.put("CMP(R1),(R0);", new Instrucao("00000000001100001101", "CMP (R1), (R0); "));
		instrucao.put("CMP(R1),(R1);", new Instrucao("00000000001000100001", "CMP (R1), (R1); "));
		instrucao.put("CMP(R1),(R2);", new Instrucao("00000000000101110111", "CMP (R1), (R2); "));
		instrucao.put("CMP(R1),(R3);", new Instrucao("00000000000011101010", "CMP (R1), (R3); "));
		instrucao.put("CMP(R1),(R4);", new Instrucao("00000000001000110001", "CMP (R1), (R4); "));
		instrucao.put("CMP(R1),R0;", new Instrucao("00000000001010101011", "CMP (R1), R0; "));
		instrucao.put("CMP(R1),R1;", new Instrucao("00000000000110100100", "CMP (R1), R1; "));
		instrucao.put("CMP(R1),R2;", new Instrucao("00000000000100100111", "CMP (R1), R2; "));
		instrucao.put("CMP(R1),R3;", new Instrucao("00000000000110101011", "CMP (R1), R3; "));
		instrucao.put("CMP(R1),R4;", new Instrucao("00000000000110110000", "CMP (R1), R4; "));
		instrucao.put("CMP(R2),(R0);", new Instrucao("00000000001011100101", "CMP (R2), (R0); "));
		instrucao.put("CMP(R2),(R1);", new Instrucao("00000000001000100000", "CMP (R2), (R1); "));
		instrucao.put("CMP(R2),(R2);", new Instrucao("00000000000011001100", "CMP (R2), (R2); "));
		instrucao.put("CMP(R2),(R3);", new Instrucao("00000000000110010100", "CMP (R2), (R3); "));
		instrucao.put("CMP(R2),(R4);", new Instrucao("00000000000011011000", "CMP (R2), (R4); "));
		instrucao.put("CMP(R2),R0;", new Instrucao("00000000001010001000", "CMP (R2), R0; "));
		instrucao.put("CMP(R2),R1;", new Instrucao("00000000000110111001", "CMP (R2), R1; "));
		instrucao.put("CMP(R2),R2;", new Instrucao("00000000001010001101", "CMP (R2), R2; "));
		instrucao.put("CMP(R2),R3;", new Instrucao("00000000001010001011", "CMP (R2), R3; "));
		instrucao.put("CMP(R2),R4;", new Instrucao("00000000000110100000", "CMP (R2), R4; "));
		instrucao.put("CMP(R3),(R0);", new Instrucao("00000000000010110101", "CMP (R3), (R0); "));
		instrucao.put("CMP(R3),(R1);", new Instrucao("00000000000110110110", "CMP (R3), (R1); "));
		instrucao.put("CMP(R3),(R2);", new Instrucao("00000000000000110010", "CMP (R3), (R2); "));
		instrucao.put("CMP(R3),(R3);", new Instrucao("00000000001011001000", "CMP (R3), (R3); "));
		instrucao.put("CMP(R3),(R4);", new Instrucao("00000000001010110010", "CMP (R3), (R4); "));
		instrucao.put("CMP(R3),R0;", new Instrucao("00000000000100011001", "CMP (R3), R0; "));
		instrucao.put("CMP(R3),R1;", new Instrucao("00000000000100011011", "CMP (R3), R1; "));
		instrucao.put("CMP(R3),R2;", new Instrucao("00000000000111110000", "CMP (R3), R2; "));
		instrucao.put("CMP(R3),R3;", new Instrucao("00000000000100100100", "CMP (R3), R3; "));
		instrucao.put("CMP(R3),R4;", new Instrucao("00000000001000001101", "CMP (R3), R4; "));
		instrucao.put("CMP(R4),(R0);", new Instrucao("00000000001010111101", "CMP (R4), (R0); "));
		instrucao.put("CMP(R4),(R1);", new Instrucao("00000000000000100111", "CMP (R4), (R1); "));
		instrucao.put("CMP(R4),(R2);", new Instrucao("00000000001001100011", "CMP (R4), (R2); "));
		instrucao.put("CMP(R4),(R3);", new Instrucao("00000000000101010111", "CMP (R4), (R3); "));
		instrucao.put("CMP(R4),(R4);", new Instrucao("00000000001001000001", "CMP (R4), (R4); "));
		instrucao.put("CMP(R4),R0;", new Instrucao("00000000000011100000", "CMP (R4), R0; "));
		instrucao.put("CMP(R4),R1;", new Instrucao("00000000000011011100", "CMP (R4), R1; "));
		instrucao.put("CMP(R4),R2;", new Instrucao("00000000000011110111", "CMP (R4), R2; "));
		instrucao.put("CMP(R4),R3;", new Instrucao("00000000000000100100", "CMP (R4), R3; "));
		instrucao.put("CMP(R4),R4;", new Instrucao("00000000000000100001", "CMP (R4), R4; "));
		instrucao.put("CMPR0,(R0);", new Instrucao("00000000001001101010", "CMP R0, (R0); "));
		instrucao.put("CMPR0,(R1);", new Instrucao("00000000000000010110", "CMP R0, (R1); "));
		instrucao.put("CMPR0,(R2);", new Instrucao("00000000001000100111", "CMP R0, (R2); "));
		instrucao.put("CMPR0,(R3);", new Instrucao("00000000000101001101", "CMP R0, (R3); "));
		instrucao.put("CMPR0,(R4);", new Instrucao("00000000000100101001", "CMP R0, (R4); "));
		instrucao.put("CMPR0,R0;", new Instrucao("00000000001000100100", "CMP R0, R0; "));
		instrucao.put("CMPR0,R1;", new Instrucao("00000000000111111011", "CMP R0, R1; "));
		instrucao.put("CMPR0,R2;", new Instrucao("00000000001011110110", "CMP R0, R2; "));
		instrucao.put("CMPR0,R3;", new Instrucao("00000000000111110100", "CMP R0, R3; "));
		instrucao.put("CMPR0,R4;", new Instrucao("00000000001011010100", "CMP R0, R4; "));
		instrucao.put("CMPR1,(R0);", new Instrucao("00000000001001001011", "CMP R1, (R0); "));
		instrucao.put("CMPR1,(R1);", new Instrucao("00000000001100011001", "CMP R1, (R1); "));
		instrucao.put("CMPR1,(R2);", new Instrucao("00000000000100000101", "CMP R1, (R2); "));
		instrucao.put("CMPR1,(R3);", new Instrucao("00000000000001000001", "CMP R1, (R3); "));
		instrucao.put("CMPR1,(R4);", new Instrucao("00000000000011011110", "CMP R1, (R4); "));
		instrucao.put("CMPR1,R0;", new Instrucao("00000000000111011000", "CMP R1, R0; "));
		instrucao.put("CMPR1,R1;", new Instrucao("00000000000111011101", "CMP R1, R1; "));
		instrucao.put("CMPR1,R2;", new Instrucao("00000000000111101001", "CMP R1, R2; "));
		instrucao.put("CMPR1,R3;", new Instrucao("00000000000100001010", "CMP R1, R3; "));
		instrucao.put("CMPR1,R4;", new Instrucao("00000000000100000010", "CMP R1, R4; "));
		instrucao.put("CMPR2,(R0);", new Instrucao("00000000000111011111", "CMP R2, (R0); "));
		instrucao.put("CMPR2,(R1);", new Instrucao("00000000001001111110", "CMP R2, (R1); "));
		instrucao.put("CMPR2,(R2);", new Instrucao("00000000000011111000", "CMP R2, (R2); "));
		instrucao.put("CMPR2,(R3);", new Instrucao("00000000000000111101", "CMP R2, (R3); "));
		instrucao.put("CMPR2,(R4);", new Instrucao("00000000001011000110", "CMP R2, (R4); "));
		instrucao.put("CMPR2,R0;", new Instrucao("00000000000011111101", "CMP R2, R0; "));
		instrucao.put("CMPR2,R1;", new Instrucao("00000000000000111010", "CMP R2, R1; "));
		instrucao.put("CMPR2,R2;", new Instrucao("00000000000101010000", "CMP R2, R2; "));
		instrucao.put("CMPR2,R3;", new Instrucao("00000000000000111111", "CMP R2, R3; "));
		instrucao.put("CMPR2,R4;", new Instrucao("00000000000010110000", "CMP R2, R4; "));
		instrucao.put("CMPR3,(R0);", new Instrucao("00000000001000111100", "CMP R3, (R0); "));
		instrucao.put("CMPR3,(R1);", new Instrucao("00000000000100110010", "CMP R3, (R1); "));
		instrucao.put("CMPR3,(R2);", new Instrucao("00000000001010110001", "CMP R3, (R2); "));
		instrucao.put("CMPR3,(R3);", new Instrucao("00000000000000001111", "CMP R3, (R3); "));
		instrucao.put("CMPR3,(R4);", new Instrucao("00000000000101111110", "CMP R3, (R4); "));
		instrucao.put("CMPR3,R0;", new Instrucao("00000000000001011001", "CMP R3, R0; "));
		instrucao.put("CMPR3,R1;", new Instrucao("00000000001011011001", "CMP R3, R1; "));
		instrucao.put("CMPR3,R2;", new Instrucao("00000000000001000101", "CMP R3, R2; "));
		instrucao.put("CMPR3,R3;", new Instrucao("00000000000001010000", "CMP R3, R3; "));
		instrucao.put("CMPR3,R4;", new Instrucao("00000000001011001101", "CMP R3, R4; "));
		instrucao.put("CMPR4,(R0);", new Instrucao("00000000000100110011", "CMP R4, (R0); "));
		instrucao.put("CMPR4,(R1);", new Instrucao("00000000000010000011", "CMP R4, (R1); "));
		instrucao.put("CMPR4,(R2);", new Instrucao("00000000001001011010", "CMP R4, (R2); "));
		instrucao.put("CMPR4,(R3);", new Instrucao("00000000000001000000", "CMP R4, (R3); "));
		instrucao.put("CMPR4,(R4);", new Instrucao("00000000001011011010", "CMP R4, (R4); "));
		instrucao.put("CMPR4,R0;", new Instrucao("00000000001010011000", "CMP R4, R0; "));
		instrucao.put("CMPR4,R1;", new Instrucao("00000000001010011011", "CMP R4, R1; "));
		instrucao.put("CMPR4,R2;", new Instrucao("00000000000110010000", "CMP R4, R2; "));
		instrucao.put("CMPR4,R3;", new Instrucao("00000000001010010111", "CMP R4, R3; "));
		instrucao.put("CMPR4,R4;", new Instrucao("00000000000110100011", "CMP R4, R4; "));
		instrucao.put("DECR0;", new Instrucao("00000000000001100000", "DEC R0; "));
		instrucao.put("DECR1;", new Instrucao("00000000001000100011", "DEC R1; "));
		instrucao.put("DECR2;", new Instrucao("00000000001000101010", "DEC R2; "));
		instrucao.put("DECR3;", new Instrucao("00000000001000101111", "DEC R3; "));
		instrucao.put("DECR4;", new Instrucao("00000000001000010101", "DEC R4; "));
		instrucao.put("INCR0;", new Instrucao("00000000001010000111", "INC R0; "));
		instrucao.put("INCR1;", new Instrucao("00000000000111010101", "INC R1; "));
		instrucao.put("INCR2;", new Instrucao("00000000000111000111", "INC R2; "));
		instrucao.put("INCR3;", new Instrucao("00000000000111001001", "INC R3; "));
		instrucao.put("INCR4;", new Instrucao("00000000000111001111", "INC R4; "));
		instrucao.put("JA#;", new Instrucao("00000000000111101000", "JA #; "));
		instrucao.put("JAE#;", new Instrucao("00000000001010111000", "JAE #; "));
		instrucao.put("JB#;", new Instrucao("00000000000010100111", "JB #; "));
		instrucao.put("JBE#;", new Instrucao("00000000000111101011", "JBE #; "));
		instrucao.put("JC#;", new Instrucao("00000000001100111111", "JC #; "));
		instrucao.put("JE#;", new Instrucao("00000000001010111011", "JE #; "));
		instrucao.put("JG#;", new Instrucao("00000000000110110001", "JG #; "));
		instrucao.put("JGE#;", new Instrucao("00000000000110101000", "JGE #; "));
		instrucao.put("JL#;", new Instrucao("00000000001011111000", "JL #; "));
		instrucao.put("JLE#;", new Instrucao("00000000000111000100", "JLE #; "));
		instrucao.put("JMP#;", new Instrucao("00000000001001110001", "JMP #; "));
		instrucao.put("JNA#;", new Instrucao("00000000000000001010", "JNA #; "));
		instrucao.put("JNAE#;", new Instrucao("00000000001000101001", "JNAE #; "));
		instrucao.put("JNB#;", new Instrucao("00000000001010110110", "JNB #; "));
		instrucao.put("JNBE#;", new Instrucao("00000000001001110010", "JNBE #; "));
		instrucao.put("JNC#;", new Instrucao("00000000001100111011", "JNC #; "));
		instrucao.put("JNE#;", new Instrucao("00000000000101101001", "JNE #; "));
		instrucao.put("JNG#;", new Instrucao("00000000001000011010", "JNG #; "));
		instrucao.put("JNGE#;", new Instrucao("00000000001001010101", "JNGE #; "));
		instrucao.put("JNL#;", new Instrucao("00000000001000111000", "JNL #; "));
		instrucao.put("JNLE#;", new Instrucao("00000000000110001100", "JNLE #; "));
		instrucao.put("JNO#;", new Instrucao("00000000001100011010", "JNO #; "));
		instrucao.put("JNP#;", new Instrucao("00000000000000110001", "JNP #; "));
		instrucao.put("JNS#;", new Instrucao("00000000001001101111", "JNS #; "));
		instrucao.put("JNZ#;", new Instrucao("00000000000100000011", "JNZ #; "));
		instrucao.put("JO#;", new Instrucao("00000000001001100010", "JO #; "));
		instrucao.put("JP#;", new Instrucao("00000000000001110110", "JP #; "));
		instrucao.put("JPE#;", new Instrucao("00000000000000010000", "JPE #; "));
		instrucao.put("JPO#;", new Instrucao("00000000000100011110", "JPO #; "));
		instrucao.put("JS#;", new Instrucao("00000000001100110110", "JS #; "));
		instrucao.put("JZ#;", new Instrucao("00000000000111000001", "JZ #; "));
		instrucao.put("LOOP#;", new Instrucao("00000000001001100110", "LOOP #; "));
		instrucao.put("MOV#,(R0);", new Instrucao("00000000000010011100", "MOV #, (R0); "));
		instrucao.put("MOV#,(R1);", new Instrucao("00000000000101001110", "MOV #, (R1); "));
		instrucao.put("MOV#,(R2);", new Instrucao("00000000000001011000", "MOV #, (R2); "));
		instrucao.put("MOV#,(R3);", new Instrucao("00000000000101011110", "MOV #, (R3); "));
		instrucao.put("MOV#,(R4);", new Instrucao("00000000000001100010", "MOV #, (R4); "));
		instrucao.put("MOV#,R0;", new Instrucao("00000000000101001000", "MOV #, R0; "));
		instrucao.put("MOV#,R1;", new Instrucao("00000000000000000101", "MOV #, R1; "));
		instrucao.put("MOV#,R2;", new Instrucao("00000000001010011001", "MOV #, R2; "));
		instrucao.put("MOV#,R3;", new Instrucao("00000000001001011000", "MOV #, R3; "));
		instrucao.put("MOV#,R4;", new Instrucao("00000000000001111111", "MOV #, R4; "));
		instrucao.put("MOV(R0),(R0);", new Instrucao("00000000001100000010", "MOV (R0), (R0); "));
		instrucao.put("MOV(R0),(R1);", new Instrucao("00000000001000111111", "MOV (R0), (R1); "));
		instrucao.put("MOV(R0),(R2);", new Instrucao("00000000000100101111", "MOV (R0), (R2); "));
		instrucao.put("MOV(R0),(R3);", new Instrucao("00000000000010110110", "MOV (R0), (R3); "));
		instrucao.put("MOV(R0),(R4);", new Instrucao("00000000000000100010", "MOV (R0), (R4); "));
		instrucao.put("MOV(R0),R0;", new Instrucao("00000000001101000011", "MOV (R0), R0; "));
		instrucao.put("MOV(R0),R1;", new Instrucao("00000000001001010010", "MOV (R0), R1; "));
		instrucao.put("MOV(R0),R2;", new Instrucao("00000000001101001010", "MOV (R0), R2; "));
		instrucao.put("MOV(R0),R3;", new Instrucao("00000000001100111010", "MOV (R0), R3; "));
		instrucao.put("MOV(R0),R4;", new Instrucao("00000000001001111111", "MOV (R0), R4; "));
		instrucao.put("MOV(R1),(R0);", new Instrucao("00000000000110001110", "MOV (R1), (R0); "));
		instrucao.put("MOV(R1),(R1);", new Instrucao("00000000001010011101", "MOV (R1), (R1); "));
		instrucao.put("MOV(R1),(R2);", new Instrucao("00000000000001011100", "MOV (R1), (R2); "));
		instrucao.put("MOV(R1),(R3);", new Instrucao("00000000001011110111", "MOV (R1), (R3); "));
		instrucao.put("MOV(R1),(R4);", new Instrucao("00000000000000101000", "MOV (R1), (R4); "));
		instrucao.put("MOV(R1),R0;", new Instrucao("00000000001000000000", "MOV (R1), R0; "));
		instrucao.put("MOV(R1),R1;", new Instrucao("00000000000111110010", "MOV (R1), R1; "));
		instrucao.put("MOV(R1),R2;", new Instrucao("00000000000001100110", "MOV (R1), R2; "));
		instrucao.put("MOV(R1),R3;", new Instrucao("00000000001000001111", "MOV (R1), R3; "));
		instrucao.put("MOV(R1),R4;", new Instrucao("00000000001011001110", "MOV (R1), R4; "));
		instrucao.put("MOV(R2),(R0);", new Instrucao("00000000000101101011", "MOV (R2), (R0); "));
		instrucao.put("MOV(R2),(R1);", new Instrucao("00000000001000001100", "MOV (R2), (R1); "));
		instrucao.put("MOV(R2),(R2);", new Instrucao("00000000000000110100", "MOV (R2), (R2); "));
		instrucao.put("MOV(R2),(R3);", new Instrucao("00000000000110000000", "MOV (R2), (R3); "));
		instrucao.put("MOV(R2),(R4);", new Instrucao("00000000000101100000", "MOV (R2), (R4); "));
		instrucao.put("MOV(R2),R0;", new Instrucao("00000000001100101110", "MOV (R2), R0; "));
		instrucao.put("MOV(R2),R1;", new Instrucao("00000000001100110111", "MOV (R2), R1; "));
		instrucao.put("MOV(R2),R2;", new Instrucao("00000000001100001000", "MOV (R2), R2; "));
		instrucao.put("MOV(R2),R3;", new Instrucao("00000000000010101011", "MOV (R2), R3; "));
		instrucao.put("MOV(R2),R4;", new Instrucao("00000000000010000000", "MOV (R2), R4; "));
		instrucao.put("MOV(R3),(R0);", new Instrucao("00000000000010100010", "MOV (R3), (R0); "));
		instrucao.put("MOV(R3),(R1);", new Instrucao("00000000000011101000", "MOV (R3), (R1); "));
		instrucao.put("MOV(R3),(R2);", new Instrucao("00000000001011101000", "MOV (R3), (R2); "));
		instrucao.put("MOV(R3),(R3);", new Instrucao("00000000001001100000", "MOV (R3), (R3); "));
		instrucao.put("MOV(R3),(R4);", new Instrucao("00000000001100001110", "MOV (R3), (R4); "));
		instrucao.put("MOV(R3),R0;", new Instrucao("00000000001001010111", "MOV (R3), R0; "));
		instrucao.put("MOV(R3),R1;", new Instrucao("00000000001010101110", "MOV (R3), R1; "));
		instrucao.put("MOV(R3),R2;", new Instrucao("00000000000101111001", "MOV (R3), R2; "));
		instrucao.put("MOV(R3),R3;", new Instrucao("00000000000101111100", "MOV (R3), R3; "));
		instrucao.put("MOV(R3),R4;", new Instrucao("00000000001000010001", "MOV (R3), R4; "));
		instrucao.put("MOV(R4),(R0);", new Instrucao("00000000000010010111", "MOV (R4), (R0); "));
		instrucao.put("MOV(R4),(R1);", new Instrucao("00000000000101001011", "MOV (R4), (R1); "));
		instrucao.put("MOV(R4),(R2);", new Instrucao("00000000000101101100", "MOV (R4), (R2); "));
		instrucao.put("MOV(R4),(R3);", new Instrucao("00000000001001110011", "MOV (R4), (R3); "));
		instrucao.put("MOV(R4),(R4);", new Instrucao("00000000000001011010", "MOV (R4), (R4); "));
		instrucao.put("MOV(R4),R0;", new Instrucao("00000000000000110101", "MOV (R4), R0; "));
		instrucao.put("MOV(R4),R1;", new Instrucao("00000000000011111001", "MOV (R4), R1; "));
		instrucao.put("MOV(R4),R2;", new Instrucao("00000000000000110000", "MOV (R4), R2; "));
		instrucao.put("MOV(R4),R3;", new Instrucao("00000000000000101011", "MOV (R4), R3; "));
		instrucao.put("MOV(R4),R4;", new Instrucao("00000000000100001100", "MOV (R4), R4; "));
		instrucao.put("MOVR0,(R0);", new Instrucao("00000000001011001011", "MOV R0, (R0); "));
		instrucao.put("MOVR0,(R1);", new Instrucao("00000000001000011011", "MOV R0, (R1); "));
		instrucao.put("MOVR0,(R2);", new Instrucao("00000000000000000100", "MOV R0, (R2); "));
		instrucao.put("MOVR0,(R3);", new Instrucao("00000000001011110001", "MOV R0, (R3); "));
		instrucao.put("MOVR0,(R4);", new Instrucao("00000000001011000111", "MOV R0, (R4); "));
		instrucao.put("MOVR0,R0;", new Instrucao("00000000000010100000", "MOV R0, R0; "));
		instrucao.put("MOVR0,R1;", new Instrucao("00000000000101111111", "MOV R0, R1; "));
		instrucao.put("MOVR0,R2;", new Instrucao("00000000000101110010", "MOV R0, R2; "));
		instrucao.put("MOVR0,R3;", new Instrucao("00000000001000010011", "MOV R0, R3; "));
		instrucao.put("MOVR0,R4;", new Instrucao("00000000000110011000", "MOV R0, R4; "));
		instrucao.put("MOVR1,(R0);", new Instrucao("00000000000111100011", "MOV R1, (R0); "));
		instrucao.put("MOVR1,(R1);", new Instrucao("00000000000011100011", "MOV R1, (R1); "));
		instrucao.put("MOVR1,(R2);", new Instrucao("00000000001100001011", "MOV R1, (R2); "));
		instrucao.put("MOVR1,(R3);", new Instrucao("00000000001000001000", "MOV R1, (R3); "));
		instrucao.put("MOVR1,(R4);", new Instrucao("00000000001100100110", "MOV R1, (R4); "));
		instrucao.put("MOVR1,R0;", new Instrucao("00000000000111111010", "MOV R1, R0; "));
		instrucao.put("MOVR1,R1;", new Instrucao("00000000001011111011", "MOV R1, R1; "));
		instrucao.put("MOVR1,R2;", new Instrucao("00000000000011001101", "MOV R1, R2; "));
		instrucao.put("MOVR1,R3;", new Instrucao("00000000001101000000", "MOV R1, R3; "));
		instrucao.put("MOVR1,R4;", new Instrucao("00000000001011010101", "MOV R1, R4; "));
		instrucao.put("MOVR2,(R0);", new Instrucao("00000000000010110011", "MOV R2, (R0); "));
		instrucao.put("MOVR2,(R1);", new Instrucao("00000000001011100111", "MOV R2, (R1); "));
		instrucao.put("MOVR2,(R2);", new Instrucao("00000000001011011011", "MOV R2, (R2); "));
		instrucao.put("MOVR2,(R3);", new Instrucao("00000000000010000100", "MOV R2, (R3); "));
		instrucao.put("MOVR2,(R4);", new Instrucao("00000000001100110011", "MOV R2, (R4); "));
		instrucao.put("MOVR2,R0;", new Instrucao("00000000000010111000", "MOV R2, R0; "));
		instrucao.put("MOVR2,R1;", new Instrucao("00000000000001110101", "MOV R2, R1; "));
		instrucao.put("MOVR2,R2;", new Instrucao("00000000000011000101", "MOV R2, R2; "));
		instrucao.put("MOVR2,R3;", new Instrucao("00000000000000101010", "MOV R2, R3; "));
		instrucao.put("MOVR2,R4;", new Instrucao("00000000000001001011", "MOV R2, R4; "));
		instrucao.put("MOVR3,(R0);", new Instrucao("00000000001000101100", "MOV R3, (R0); "));
		instrucao.put("MOVR3,(R1);", new Instrucao("00000000000011010000", "MOV R3, (R1); "));
		instrucao.put("MOVR3,(R2);", new Instrucao("00000000001001101100", "MOV R3, (R2); "));
		instrucao.put("MOVR3,(R3);", new Instrucao("00000000001100100000", "MOV R3, (R3); "));
		instrucao.put("MOVR3,(R4);", new Instrucao("00000000001011100010", "MOV R3, (R4); "));
		instrucao.put("MOVR3,R0;", new Instrucao("00000000001001000100", "MOV R3, R0; "));
		instrucao.put("MOVR3,R1;", new Instrucao("00000000001001000011", "MOV R3, R1; "));
		instrucao.put("MOVR3,R2;", new Instrucao("00000000001000011000", "MOV R3, R2; "));
		instrucao.put("MOVR3,R3;", new Instrucao("00000000001100010110", "MOV R3, R3; "));
		instrucao.put("MOVR3,R4;", new Instrucao("00000000001100001111", "MOV R3, R4; "));
		instrucao.put("MOVR4,(R0);", new Instrucao("00000000000011011010", "MOV R4, (R0); "));
		instrucao.put("MOVR4,(R1);", new Instrucao("00000000000100101100", "MOV R4, (R1); "));
		instrucao.put("MOVR4,(R2);", new Instrucao("00000000001000110011", "MOV R4, (R2); "));
		instrucao.put("MOVR4,(R3);", new Instrucao("00000000001001010100", "MOV R4, (R3); "));
		instrucao.put("MOVR4,(R4);", new Instrucao("00000000001010101010", "MOV R4, (R4); "));
		instrucao.put("MOVR4,R0;", new Instrucao("00000000000000011111", "MOV R4, R0; "));
		instrucao.put("MOVR4,R1;", new Instrucao("00000000001010110000", "MOV R4, R1; "));
		instrucao.put("MOVR4,R2;", new Instrucao("00000000001010000001", "MOV R4, R2; "));
		instrucao.put("MOVR4,R3;", new Instrucao("00000000001010101000", "MOV R4, R3; "));
		instrucao.put("MOVR4,R4;", new Instrucao("00000000001010101101", "MOV R4, R4; "));
		instrucao.put("NEG(R0);", new Instrucao("00000000000101101110", "NEG (R0); "));
		instrucao.put("NEG(R1);", new Instrucao("00000000001001111000", "NEG (R1); "));
		instrucao.put("NEG(R2);", new Instrucao("00000000000011100001", "NEG (R2); "));
		instrucao.put("NEG(R3);", new Instrucao("00000000000110000001", "NEG (R3); "));
		instrucao.put("NEG(R4);", new Instrucao("00000000000100010111", "NEG (R4); "));
		instrucao.put("NEGR0;", new Instrucao("00000000001100011101", "NEG R0; "));
		instrucao.put("NEGR1;", new Instrucao("00000000001100100010", "NEG R1; "));
		instrucao.put("NEGR2;", new Instrucao("00000000000010010011", "NEG R2; "));
		instrucao.put("NEGR3;", new Instrucao("00000000001001110110", "NEG R3; "));
		instrucao.put("NEGR4;", new Instrucao("00000000000010101000", "NEG R4; "));
		instrucao.put("NOP;", new Instrucao("00000000001011111100", "NOP; "));
		instrucao.put("NOT(R0);", new Instrucao("00000000001100001010", "NOT (R0); "));
		instrucao.put("NOT(R1);", new Instrucao("00000000000001011110", "NOT (R1); "));
		instrucao.put("NOT(R2);", new Instrucao("00000000001011000001", "NOT (R2); "));
		instrucao.put("NOT(R3);", new Instrucao("00000000000101110110", "NOT (R3); "));
		instrucao.put("NOT(R4);", new Instrucao("00000000000001001001", "NOT (R4); "));
		instrucao.put("NOTR0;", new Instrucao("00000000001000001010", "NOT R0; "));
		instrucao.put("NOTR1;", new Instrucao("00000000001011010000", "NOT R1; "));
		instrucao.put("NOTR2;", new Instrucao("00000000001000001011", "NOT R2; "));
		instrucao.put("NOTR3;", new Instrucao("00000000000111101010", "NOT R3; "));
		instrucao.put("NOTR4;", new Instrucao("00000000000000001000", "NOT R4; "));
		instrucao.put("OR#,(R0);", new Instrucao("00000000000100110111", "OR #, (R0); "));
		instrucao.put("OR#,(R1);", new Instrucao("00000000000000001001", "OR #, (R1); "));
		instrucao.put("OR#,(R2);", new Instrucao("00000000000010100110", "OR #, (R2); "));
		instrucao.put("OR#,(R3);", new Instrucao("00000000000000001100", "OR #, (R3); "));
		instrucao.put("OR#,(R4);", new Instrucao("00000000000011010001", "OR #, (R4); "));
		instrucao.put("OR#,R0;", new Instrucao("00000000001000000001", "OR #, R0; "));
		instrucao.put("OR#,R1;", new Instrucao("00000000000010011110", "OR #, R1; "));
		instrucao.put("OR#,R2;", new Instrucao("00000000001011010110", "OR #, R2; "));
		instrucao.put("OR#,R3;", new Instrucao("00000000001011001001", "OR #, R3; "));
		instrucao.put("OR#,R4;", new Instrucao("00000000000000000011", "OR #, R4; "));
		instrucao.put("OR(R0),(R0);", new Instrucao("00000000001010010100", "OR (R0), (R0); "));
		instrucao.put("OR(R0),(R1);", new Instrucao("00000000000101010101", "OR (R0), (R1); "));
		instrucao.put("OR(R0),(R2);", new Instrucao("00000000001001110000", "OR (R0), (R2); "));
		instrucao.put("OR(R0),(R3);", new Instrucao("00000000000100001111", "OR (R0), (R3); "));
		instrucao.put("OR(R0),(R4);", new Instrucao("00000000000001010100", "OR (R0), (R4); "));
		instrucao.put("OR(R0),R0;", new Instrucao("00000000000000010100", "OR (R0), R0; "));
		instrucao.put("OR(R0),R1;", new Instrucao("00000000000000010111", "OR (R0), R1; "));
		instrucao.put("OR(R0),R2;", new Instrucao("00000000000101000011", "OR (R0), R2; "));
		instrucao.put("OR(R0),R3;", new Instrucao("00000000000000010011", "OR (R0), R3; "));
		instrucao.put("OR(R0),R4;", new Instrucao("00000000001010000011", "OR (R0), R4; "));
		instrucao.put("OR(R1),(R0);", new Instrucao("00000000000000000111", "OR (R1), (R0); "));
		instrucao.put("OR(R1),(R1);", new Instrucao("00000000000011010011", "OR (R1), (R1); "));
		instrucao.put("OR(R1),(R2);", new Instrucao("00000000000110111101", "OR (R1), (R2); "));
		instrucao.put("OR(R1),(R3);", new Instrucao("00000000000100001011", "OR (R1), (R3); "));
		instrucao.put("OR(R1),(R4);", new Instrucao("00000000000111110101", "OR (R1), (R4); "));
		instrucao.put("OR(R1),R0;", new Instrucao("00000000000010010001", "OR (R1), R0; "));
		instrucao.put("OR(R1),R1;", new Instrucao("00000000000111101110", "OR (R1), R1; "));
		instrucao.put("OR(R1),R2;", new Instrucao("00000000000100101011", "OR (R1), R2; "));
		instrucao.put("OR(R1),R3;", new Instrucao("00000000000100011010", "OR (R1), R3; "));
		instrucao.put("OR(R1),R4;", new Instrucao("00000000001010001100", "OR (R1), R4; "));
		instrucao.put("OR(R2),(R0);", new Instrucao("00000000000110011101", "OR (R2), (R0); "));
		instrucao.put("OR(R2),(R1);", new Instrucao("00000000000100101110", "OR (R2), (R1); "));
		instrucao.put("OR(R2),(R2);", new Instrucao("00000000001100010001", "OR (R2), (R2); "));
		instrucao.put("OR(R2),(R3);", new Instrucao("00000000000001111100", "OR (R2), (R3); "));
		instrucao.put("OR(R2),(R4);", new Instrucao("00000000001010010001", "OR (R2), (R4); "));
		instrucao.put("OR(R2),R0;", new Instrucao("00000000001011100110", "OR (R2), R0; "));
		instrucao.put("OR(R2),R1;", new Instrucao("00000000001010110101", "OR (R2), R1; "));
		instrucao.put("OR(R2),R2;", new Instrucao("00000000001101001100", "OR (R2), R2; "));
		instrucao.put("OR(R2),R3;", new Instrucao("00000000001101000001", "OR (R2), R3; "));
		instrucao.put("OR(R2),R4;", new Instrucao("00000000001100111001", "OR (R2), R4; "));
		instrucao.put("OR(R3),(R0);", new Instrucao("00000000000011100101", "OR (R3), (R0); "));
		instrucao.put("OR(R3),(R1);", new Instrucao("00000000000110100001", "OR (R3), (R1); "));
		instrucao.put("OR(R3),(R2);", new Instrucao("00000000000111110001", "OR (R3), (R2); "));
		instrucao.put("OR(R3),(R3);", new Instrucao("00000000000010000110", "OR (R3), (R3); "));
		instrucao.put("OR(R3),(R4);", new Instrucao("00000000000100111001", "OR (R3), (R4); "));
		instrucao.put("OR(R3),R0;", new Instrucao("00000000000100100110", "OR (R3), R0; "));
		instrucao.put("OR(R3),R1;", new Instrucao("00000000000011101100", "OR (R3), R1; "));
		instrucao.put("OR(R3),R2;", new Instrucao("00000000000100000110", "OR (R3), R2; "));
		instrucao.put("OR(R3),R3;", new Instrucao("00000000000101010011", "OR (R3), R3; "));
		instrucao.put("OR(R3),R4;", new Instrucao("00000000000001011011", "OR (R3), R4; "));
		instrucao.put("OR(R4),(R0);", new Instrucao("00000000000011111011", "OR (R4), (R0); "));
		instrucao.put("OR(R4),(R1);", new Instrucao("00000000001001100111", "OR (R4), (R1); "));
		instrucao.put("OR(R4),(R2);", new Instrucao("00000000000010100001", "OR (R4), (R2); "));
		instrucao.put("OR(R4),(R3);", new Instrucao("00000000001101001101", "OR (R4), (R3); "));
		instrucao.put("OR(R4),(R4);", new Instrucao("00000000000100111111", "OR (R4), (R4); "));
		instrucao.put("OR(R4),R0;", new Instrucao("00000000000100100101", "OR (R4), R0; "));
		instrucao.put("OR(R4),R1;", new Instrucao("00000000000100101000", "OR (R4), R1; "));
		instrucao.put("OR(R4),R2;", new Instrucao("00000000001000000010", "OR (R4), R2; "));
		instrucao.put("OR(R4),R3;", new Instrucao("00000000000110100010", "OR (R4), R3; "));
		instrucao.put("OR(R4),R4;", new Instrucao("00000000001010001001", "OR (R4), R4; "));
		instrucao.put("ORR0,(R0);", new Instrucao("00000000000111011110", "OR R0, (R0); "));
		instrucao.put("ORR0,(R1);", new Instrucao("00000000001000011100", "OR R0, (R1); "));
		instrucao.put("ORR0,(R2);", new Instrucao("00000000000001110000", "OR R0, (R2); "));
		instrucao.put("ORR0,(R3);", new Instrucao("00000000000011000001", "OR R0, (R3); "));
		instrucao.put("ORR0,(R4);", new Instrucao("00000000000010000101", "OR R0, (R4); "));
		instrucao.put("ORR0,R0;", new Instrucao("00000000000110001010", "OR R0, R0; "));
		instrucao.put("ORR0,R1;", new Instrucao("00000000000110110011", "OR R0, R1; "));
		instrucao.put("ORR0,R2;", new Instrucao("00000000000110000111", "OR R0, R2; "));
		instrucao.put("ORR0,R3;", new Instrucao("00000000001010010101", "OR R0, R3; "));
		instrucao.put("ORR0,R4;", new Instrucao("00000000001001100101", "OR R0, R4; "));
		instrucao.put("ORR1,(R0);", new Instrucao("00000000001000000011", "OR R1, (R0); "));
		instrucao.put("ORR1,(R1);", new Instrucao("00000000000101000110", "OR R1, (R1); "));
		instrucao.put("ORR1,(R2);", new Instrucao("00000000001000110111", "OR R1, (R2); "));
		instrucao.put("ORR1,(R3);", new Instrucao("00000000000011001011", "OR R1, (R3); "));
		instrucao.put("ORR1,(R4);", new Instrucao("00000000000000011100", "OR R1, (R4); "));
		instrucao.put("ORR1,R0;", new Instrucao("00000000000101101010", "OR R1, R0; "));
		instrucao.put("ORR1,R1;", new Instrucao("00000000000000100011", "OR R1, R1; "));
		instrucao.put("ORR1,R2;", new Instrucao("00000000000000011110", "OR R1, R2; "));
		instrucao.put("ORR1,R3;", new Instrucao("00000000000101000101", "OR R1, R3; "));
		instrucao.put("ORR1,R4;", new Instrucao("00000000001000111011", "OR R1, R4; "));
		instrucao.put("ORR2,(R0);", new Instrucao("00000000000000100110", "OR R2, (R0); "));
		instrucao.put("ORR2,(R1);", new Instrucao("00000000000010001010", "OR R2, (R1); "));
		instrucao.put("ORR2,(R2);", new Instrucao("00000000001100000110", "OR R2, (R2); "));
		instrucao.put("ORR2,(R3);", new Instrucao("00000000000110111111", "OR R2, (R3); "));
		instrucao.put("ORR2,(R4);", new Instrucao("00000000001101001000", "OR R2, (R4); "));
		instrucao.put("ORR2,R0;", new Instrucao("00000000000101101101", "OR R2, R0; "));
		instrucao.put("ORR2,R1;", new Instrucao("00000000001001111010", "OR R2, R1; "));
		instrucao.put("ORR2,R2;", new Instrucao("00000000000101101111", "OR R2, R2; "));
		instrucao.put("ORR2,R3;", new Instrucao("00000000000110010111", "OR R2, R3; "));
		instrucao.put("ORR2,R4;", new Instrucao("00000000001001011110", "OR R2, R4; "));
		instrucao.put("ORR3,(R0);", new Instrucao("00000000000011000011", "OR R3, (R0); "));
		instrucao.put("ORR3,(R1);", new Instrucao("00000000000000011101", "OR R3, (R1); "));
		instrucao.put("ORR3,(R2);", new Instrucao("00000000001100001100", "OR R3, (R2); "));
		instrucao.put("ORR3,(R3);", new Instrucao("00000000000100011000", "OR R3, (R3); "));
		instrucao.put("ORR3,(R4);", new Instrucao("00000000001011111101", "OR R3, (R4); "));
		instrucao.put("ORR3,R0;", new Instrucao("00000000000110101001", "OR R3, R0; "));
		instrucao.put("ORR3,R1;", new Instrucao("00000000001001011100", "OR R3, R1; "));
		instrucao.put("ORR3,R2;", new Instrucao("00000000001001011111", "OR R3, R2; "));
		instrucao.put("ORR3,R3;", new Instrucao("00000000001001100100", "OR R3, R3; "));
		instrucao.put("ORR3,R4;", new Instrucao("00000000001001001000", "OR R3, R4; "));
		instrucao.put("ORR4,(R0);", new Instrucao("00000000001100010101", "OR R4, (R0); "));
		instrucao.put("ORR4,(R1);", new Instrucao("00000000001000111001", "OR R4, (R1); "));
		instrucao.put("ORR4,(R2);", new Instrucao("00000000001011011111", "OR R4, (R2); "));
		instrucao.put("ORR4,(R3);", new Instrucao("00000000000000001011", "OR R4, (R3); "));
		instrucao.put("ORR4,(R4);", new Instrucao("00000000000000110111", "OR R4, (R4); "));
		instrucao.put("ORR4,R0;", new Instrucao("00000000000010001001", "OR R4, R0; "));
		instrucao.put("ORR4,R1;", new Instrucao("00000000000010001111", "OR R4, R1; "));
		instrucao.put("ORR4,R2;", new Instrucao("00000000000100000000", "OR R4, R2; "));
		instrucao.put("ORR4,R3;", new Instrucao("00000000001010101111", "OR R4, R3; "));
		instrucao.put("ORR4,R4;", new Instrucao("00000000000000001101", "OR R4, R4; "));
		instrucao.put("POPR0;", new Instrucao("00000000001000001110", "POP R0; "));
		instrucao.put("POPR1;", new Instrucao("00000000000111110110", "POP R1; "));
		instrucao.put("POPR2;", new Instrucao("00000000001000110101", "POP R2; "));
		instrucao.put("POPR3;", new Instrucao("00000000000100000001", "POP R3; "));
		instrucao.put("POPR4;", new Instrucao("00000000000100010101", "POP R4; "));
		instrucao.put("POPF;", new Instrucao("00000000001000110110", "POPF; "));
		instrucao.put("PUSHR0;", new Instrucao("00000000001010110111", "PUSH R0; "));
		instrucao.put("PUSHR1;", new Instrucao("00000000000111000010", "PUSH R1; "));
		instrucao.put("PUSHR2;", new Instrucao("00000000000111011011", "PUSH R2; "));
		instrucao.put("PUSHR3;", new Instrucao("00000000000101110001", "PUSH R3; "));
		instrucao.put("PUSHR4;", new Instrucao("00000000000111100101", "PUSH R4; "));
		instrucao.put("PUSHF;", new Instrucao("00000000001100101011", "PUSHF; "));
		instrucao.put("SHL(R0);", new Instrucao("00000000000100001000", "SHL (R0); "));
		instrucao.put("SHL(R1);", new Instrucao("00000000001100000100", "SHL (R1); "));
		instrucao.put("SHL(R2);", new Instrucao("00000000001001010110", "SHL (R2); "));
		instrucao.put("SHL(R3);", new Instrucao("00000000001001011011", "SHL (R3); "));
		instrucao.put("SHL(R4);", new Instrucao("00000000000101100101", "SHL (R4); "));
		instrucao.put("SHLR0;", new Instrucao("00000000001100101000", "SHL R0; "));
		instrucao.put("SHLR1;", new Instrucao("00000000000001110111", "SHL R1; "));
		instrucao.put("SHLR2;", new Instrucao("00000000001011011100", "SHL R2; "));
		instrucao.put("SHLR3;", new Instrucao("00000000001101000100", "SHL R3; "));
		instrucao.put("SHLR4;", new Instrucao("00000000001001010011", "SHL R4; "));
		instrucao.put("SHR(R0);", new Instrucao("00000000001001110100", "SHR (R0); "));
		instrucao.put("SHR(R1);", new Instrucao("00000000001000101000", "SHR (R1); "));
		instrucao.put("SHR(R2);", new Instrucao("00000000001100110001", "SHR (R2); "));
		instrucao.put("SHR(R3);", new Instrucao("00000000001100011011", "SHR (R3); "));
		instrucao.put("SHR(R4);", new Instrucao("00000000000101100100", "SHR (R4); "));
		instrucao.put("SHRR0;", new Instrucao("00000000000101110100", "SHR R0; "));
		instrucao.put("SHRR1;", new Instrucao("00000000000100011111", "SHR R1; "));
		instrucao.put("SHRR2;", new Instrucao("00000000000100110000", "SHR R2; "));
		instrucao.put("SHRR3;", new Instrucao("00000000001010100110", "SHR R3; "));
		instrucao.put("SHRR4;", new Instrucao("00000000000000011010", "SHR R4; "));
		instrucao.put("START;", new Instrucao("00000000000111100111", "START; "));
		instrucao.put("SUB#,(R0);", new Instrucao("00000000000001000111", "SUB #, (R0); "));
		instrucao.put("SUB#,(R1);", new Instrucao("00000000000011111110", "SUB #, (R1); "));
		instrucao.put("SUB#,(R2);", new Instrucao("00000000001100101001", "SUB #, (R2); "));
		instrucao.put("SUB#,(R3);", new Instrucao("00000000001011110000", "SUB #, (R3); "));
		instrucao.put("SUB#,(R4);", new Instrucao("00000000001100111110", "SUB #, (R4); "));
		instrucao.put("SUB#,R0;", new Instrucao("00000000000001100100", "SUB #, R0; "));
		instrucao.put("SUB#,R1;", new Instrucao("00000000000101100011", "SUB #, R1; "));
		instrucao.put("SUB#,R2;", new Instrucao("00000000000010001110", "SUB #, R2; "));
		instrucao.put("SUB#,R3;", new Instrucao("00000000000010001011", "SUB #, R3; "));
		instrucao.put("SUB#,R4;", new Instrucao("00000000000100111100", "SUB #, R4; "));
		instrucao.put("SUB(R0),(R0);", new Instrucao("00000000001100111101", "SUB (R0), (R0); "));
		instrucao.put("SUB(R0),(R1);", new Instrucao("00000000001001111101", "SUB (R0), (R1); "));
		instrucao.put("SUB(R0),(R2);", new Instrucao("00000000000010000111", "SUB (R0), (R2); "));
		instrucao.put("SUB(R0),(R3);", new Instrucao("00000000000101000100", "SUB (R0), (R3); "));
		instrucao.put("SUB(R0),(R4);", new Instrucao("00000000000000011011", "SUB (R0), (R4); "));
		instrucao.put("SUB(R0),R0;", new Instrucao("00000000001101001110", "SUB (R0), R0; "));
		instrucao.put("SUB(R0),R1;", new Instrucao("00000000001001111011", "SUB (R0), R1; "));
		instrucao.put("SUB(R0),R2;", new Instrucao("00000000001011000101", "SUB (R0), R2; "));
		instrucao.put("SUB(R0),R3;", new Instrucao("00000000001100111000", "SUB (R0), R3; "));
		instrucao.put("SUB(R0),R4;", new Instrucao("00000000001001111100", "SUB (R0), R4; "));
		instrucao.put("SUB(R1),(R0);", new Instrucao("00000000000111100010", "SUB (R1), (R0); "));
		instrucao.put("SUB(R1),(R1);", new Instrucao("00000000001010110011", "SUB (R1), (R1); "));
		instrucao.put("SUB(R1),(R2);", new Instrucao("00000000000101011100", "SUB (R1), (R2); "));
		instrucao.put("SUB(R1),(R3);", new Instrucao("00000000000010011001", "SUB (R1), (R3); "));
		instrucao.put("SUB(R1),(R4);", new Instrucao("00000000000100110101", "SUB (R1), (R4); "));
		instrucao.put("SUB(R1),R0;", new Instrucao("00000000000101001111", "SUB (R1), R0; "));
		instrucao.put("SUB(R1),R1;", new Instrucao("00000000000101001001", "SUB (R1), R1; "));
		instrucao.put("SUB(R1),R2;", new Instrucao("00000000001011110100", "SUB (R1), R2; "));
		instrucao.put("SUB(R1),R3;", new Instrucao("00000000000100011100", "SUB (R1), R3; "));
		instrucao.put("SUB(R1),R4;", new Instrucao("00000000001011010010", "SUB (R1), R4; "));
		instrucao.put("SUB(R2),(R0);", new Instrucao("00000000001000000110", "SUB (R2), (R0); "));
		instrucao.put("SUB(R2),(R1);", new Instrucao("00000000000011000010", "SUB (R2), (R1); "));
		instrucao.put("SUB(R2),(R2);", new Instrucao("00000000001001001010", "SUB (R2), (R2); "));
		instrucao.put("SUB(R2),(R3);", new Instrucao("00000000001000101101", "SUB (R2), (R3); "));
		instrucao.put("SUB(R2),(R4);", new Instrucao("00000000001010111010", "SUB (R2), (R4); "));
		instrucao.put("SUB(R2),R0;", new Instrucao("00000000001010100000", "SUB (R2), R0; "));
		instrucao.put("SUB(R2),R1;", new Instrucao("00000000001010011010", "SUB (R2), R1; "));
		instrucao.put("SUB(R2),R2;", new Instrucao("00000000001001101001", "SUB (R2), R2; "));
		instrucao.put("SUB(R2),R3;", new Instrucao("00000000000000010101", "SUB (R2), R3; "));
		instrucao.put("SUB(R2),R4;", new Instrucao("00000000000000010010", "SUB (R2), R4; "));
		instrucao.put("SUB(R3),(R0);", new Instrucao("00000000000110001101", "SUB (R3), (R0); "));
		instrucao.put("SUB(R3),(R1);", new Instrucao("00000000000010010000", "SUB (R3), (R1); "));
		instrucao.put("SUB(R3),(R2);", new Instrucao("00000000000110001000", "SUB (R3), (R2); "));
		instrucao.put("SUB(R3),(R3);", new Instrucao("00000000000001110011", "SUB (R3), (R3); "));
		instrucao.put("SUB(R3),(R4);", new Instrucao("00000000000001001110", "SUB (R3), (R4); "));
		instrucao.put("SUB(R3),R0;", new Instrucao("00000000001101001011", "SUB (R3), R0; "));
		instrucao.put("SUB(R3),R1;", new Instrucao("00000000000010101010", "SUB (R3), R1; "));
		instrucao.put("SUB(R3),R2;", new Instrucao("00000000000010011101", "SUB (R3), R2; "));
		instrucao.put("SUB(R3),R3;", new Instrucao("00000000000010010010", "SUB (R3), R3; "));
		instrucao.put("SUB(R3),R4;", new Instrucao("00000000000010000001", "SUB (R3), R4; "));
		instrucao.put("SUB(R4),(R0);", new Instrucao("00000000001100110100", "SUB (R4), (R0); "));
		instrucao.put("SUB(R4),(R1);", new Instrucao("00000000000001100001", "SUB (R4), (R1); "));
		instrucao.put("SUB(R4),(R2);", new Instrucao("00000000000111001010", "SUB (R4), (R2); "));
		instrucao.put("SUB(R4),(R3);", new Instrucao("00000000000101111011", "SUB (R4), (R3); "));
		instrucao.put("SUB(R4),(R4);", new Instrucao("00000000000111011010", "SUB (R4), (R4); "));
		instrucao.put("SUB(R4),R0;", new Instrucao("00000000001001100001", "SUB (R4), R0; "));
		instrucao.put("SUB(R4),R1;", new Instrucao("00000000001100010111", "SUB (R4), R1; "));
		instrucao.put("SUB(R4),R2;", new Instrucao("00000000001001001001", "SUB (R4), R2; "));
		instrucao.put("SUB(R4),R3;", new Instrucao("00000000000010101100", "SUB (R4), R3; "));
		instrucao.put("SUB(R4),R4;", new Instrucao("00000000001100101100", "SUB (R4), R4; "));
		instrucao.put("SUBR0,(R0);", new Instrucao("00000000000101100111", "SUB R0, (R0); "));
		instrucao.put("SUBR0,(R1);", new Instrucao("00000000000010011000", "SUB R0, (R1); "));
		instrucao.put("SUBR0,(R2);", new Instrucao("00000000000000110110", "SUB R0, (R2); "));
		instrucao.put("SUBR0,(R3);", new Instrucao("00000000000000001110", "SUB R0, (R3); "));
		instrucao.put("SUBR0,(R4);", new Instrucao("00000000000001101000", "SUB R0, (R4); "));
		instrucao.put("SUBR0,R0;", new Instrucao("00000000001100011111", "SUB R0, R0; "));
		instrucao.put("SUBR0,R1;", new Instrucao("00000000000110011001", "SUB R0, R1; "));
		instrucao.put("SUBR0,R2;", new Instrucao("00000000000110011011", "SUB R0, R2; "));
		instrucao.put("SUBR0,R3;", new Instrucao("00000000000110011110", "SUB R0, R3; "));
		instrucao.put("SUBR0,R4;", new Instrucao("00000000000110000100", "SUB R0, R4; "));
		instrucao.put("SUBR1,(R0);", new Instrucao("00000000000100010001", "SUB R1, (R0); "));
		instrucao.put("SUBR1,(R1);", new Instrucao("00000000000111001100", "SUB R1, (R1); "));
		instrucao.put("SUBR1,(R2);", new Instrucao("00000000000010011010", "SUB R1, (R2); "));
		instrucao.put("SUBR1,(R3);", new Instrucao("00000000001011101111", "SUB R1, (R3); "));
		instrucao.put("SUBR1,(R4);", new Instrucao("00000000000011010101", "SUB R1, (R4); "));
		instrucao.put("SUBR1,R0;", new Instrucao("00000000000010110001", "SUB R1, R0; "));
		instrucao.put("SUBR1,R1;", new Instrucao("00000000000110110100", "SUB R1, R1; "));
		instrucao.put("SUBR1,R2;", new Instrucao("00000000001011101100", "SUB R1, R2; "));
		instrucao.put("SUBR1,R3;", new Instrucao("00000000001100011110", "SUB R1, R3; "));
		instrucao.put("SUBR1,R4;", new Instrucao("00000000000110011100", "SUB R1, R4; "));
		instrucao.put("SUBR2,(R0);", new Instrucao("00000000001010010010", "SUB R2, (R0); "));
		instrucao.put("SUBR2,(R1);", new Instrucao("00000000000111010110", "SUB R2, (R1); "));
		instrucao.put("SUBR2,(R2);", new Instrucao("00000000000000011001", "SUB R2, (R2); "));
		instrucao.put("SUBR2,(R3);", new Instrucao("00000000000101010100", "SUB R2, (R3); "));
		instrucao.put("SUBR2,(R4);", new Instrucao("00000000000010010101", "SUB R2, (R4); "));
		instrucao.put("SUBR2,R0;", new Instrucao("00000000001011010001", "SUB R2, R0; "));
		instrucao.put("SUBR2,R1;", new Instrucao("00000000001011010011", "SUB R2, R1; "));
		instrucao.put("SUBR2,R2;", new Instrucao("00000000001000010010", "SUB R2, R2; "));
		instrucao.put("SUBR2,R3;", new Instrucao("00000000000011001111", "SUB R2, R3; "));
		instrucao.put("SUBR2,R4;", new Instrucao("00000000000101111000", "SUB R2, R4; "));
		instrucao.put("SUBR3,(R0);", new Instrucao("00000000001100100101", "SUB R3, (R0); "));
		instrucao.put("SUBR3,(R1);", new Instrucao("00000000000000000110", "SUB R3, (R1); "));
		instrucao.put("SUBR3,(R2);", new Instrucao("00000000000011110100", "SUB R3, (R2); "));
		instrucao.put("SUBR3,(R3);", new Instrucao("00000000000110111010", "SUB R3, (R3); "));
		instrucao.put("SUBR3,(R4);", new Instrucao("00000000000001010111", "SUB R3, (R4); "));
		instrucao.put("SUBR3,R0;", new Instrucao("00000000001000011001", "SUB R3, R0; "));
		instrucao.put("SUBR3,R1;", new Instrucao("00000000001001000000", "SUB R3, R1; "));
		instrucao.put("SUBR3,R2;", new Instrucao("00000000001000010110", "SUB R3, R2; "));
		instrucao.put("SUBR3,R3;", new Instrucao("00000000001011101110", "SUB R3, R3; "));
		instrucao.put("SUBR3,R4;", new Instrucao("00000000001011100100", "SUB R3, R4; "));
		instrucao.put("SUBR4,(R0);", new Instrucao("00000000001000111101", "SUB R4, (R0); "));
		instrucao.put("SUBR4,(R1);", new Instrucao("00000000000001010110", "SUB R4, (R1); "));
		instrucao.put("SUBR4,(R2);", new Instrucao("00000000000101110101", "SUB R4, (R2); "));
		instrucao.put("SUBR4,(R3);", new Instrucao("00000000000010110100", "SUB R4, (R3); "));
		instrucao.put("SUBR4,(R4);", new Instrucao("00000000000110010001", "SUB R4, (R4); "));
		instrucao.put("SUBR4,R0;", new Instrucao("00000000001001000111", "SUB R4, R0; "));
		instrucao.put("SUBR4,R1;", new Instrucao("00000000000110000110", "SUB R4, R1; "));
		instrucao.put("SUBR4,R2;", new Instrucao("00000000000001100011", "SUB R4, R2; "));
		instrucao.put("SUBR4,R3;", new Instrucao("00000000000110001011", "SUB R4, R3; "));
		instrucao.put("SUBR4,R4;", new Instrucao("00000000000110010101", "SUB R4, R4; "));
		instrucao.put("XCHG(R0),R0;", new Instrucao("00000000000011010110", "XCHG (R0), R0; "));
		instrucao.put("XCHG(R0),R1;", new Instrucao("00000000000011010010", "XCHG (R0), R1; "));
		instrucao.put("XCHG(R0),R2;", new Instrucao("00000000000101001100", "XCHG (R0), R2; "));
		instrucao.put("XCHG(R0),R3;", new Instrucao("00000000000001000110", "XCHG (R0), R3; "));
		instrucao.put("XCHG(R0),R4;", new Instrucao("00000000000000010001", "XCHG (R0), R4; "));
		instrucao.put("XCHG(R1),R0;", new Instrucao("00000000001011111110", "XCHG (R1), R0; "));
		instrucao.put("XCHG(R1),R1;", new Instrucao("00000000001011110101", "XCHG (R1), R1; "));
		instrucao.put("XCHG(R1),R2;", new Instrucao("00000000001011101010", "XCHG (R1), R2; "));
		instrucao.put("XCHG(R1),R3;", new Instrucao("00000000001100110010", "XCHG (R1), R3; "));
		instrucao.put("XCHG(R1),R4;", new Instrucao("00000000000010011011", "XCHG (R1), R4; "));
		instrucao.put("XCHG(R2),R0;", new Instrucao("00000000000001111000", "XCHG (R2), R0; "));
		instrucao.put("XCHG(R2),R1;", new Instrucao("00000000000111111101", "XCHG (R2), R1; "));
		instrucao.put("XCHG(R2),R2;", new Instrucao("00000000000101011011", "XCHG (R2), R2; "));
		instrucao.put("XCHG(R2),R3;", new Instrucao("00000000000000100000", "XCHG (R2), R3; "));
		instrucao.put("XCHG(R2),R4;", new Instrucao("00000000001000011110", "XCHG (R2), R4; "));
		instrucao.put("XCHG(R3),R0;", new Instrucao("00000000001101000101", "XCHG (R3), R0; "));
		instrucao.put("XCHG(R3),R1;", new Instrucao("00000000001101001001", "XCHG (R3), R1; "));
		instrucao.put("XCHG(R3),R2;", new Instrucao("00000000000010111101", "XCHG (R3), R2; "));
		instrucao.put("XCHG(R3),R3;", new Instrucao("00000000000001011101", "XCHG (R3), R3; "));
		instrucao.put("XCHG(R3),R4;", new Instrucao("00000000001000110000", "XCHG (R3), R4; "));
		instrucao.put("XCHG(R4),R0;", new Instrucao("00000000001101000110", "XCHG (R4), R0; "));
		instrucao.put("XCHG(R4),R1;", new Instrucao("00000000001101000010", "XCHG (R4), R1; "));
		instrucao.put("XCHG(R4),R2;", new Instrucao("00000000001100101010", "XCHG (R4), R2; "));
		instrucao.put("XCHG(R4),R3;", new Instrucao("00000000001001001100", "XCHG (R4), R3; "));
		instrucao.put("XCHG(R4),R4;", new Instrucao("00000000000110011111", "XCHG (R4), R4; "));
		instrucao.put("XCHGR0,(R0);", new Instrucao("00000000000111010100", "XCHG R0, (R0); "));
		instrucao.put("XCHGR0,(R1);", new Instrucao("00000000001010100011", "XCHG R0, (R1); "));
		instrucao.put("XCHGR0,(R2);", new Instrucao("00000000000101010010", "XCHG R0, (R2); "));
		instrucao.put("XCHGR0,(R3);", new Instrucao("00000000000010111110", "XCHG R0, (R3); "));
		instrucao.put("XCHGR0,(R4);", new Instrucao("00000000001010100111", "XCHG R0, (R4); "));
		instrucao.put("XCHGR0,R0;", new Instrucao("00000000001000110100", "XCHG R0, R0; "));
		instrucao.put("XCHGR0,R1;", new Instrucao("00000000000001000100", "XCHG R0, R1; "));
		instrucao.put("XCHGR0,R2;", new Instrucao("00000000001100000001", "XCHG R0, R2; "));
		instrucao.put("XCHGR0,R3;", new Instrucao("00000000001000111110", "XCHG R0, R3; "));
		instrucao.put("XCHGR0,R4;", new Instrucao("00000000000111111001", "XCHG R0, R4; "));
		instrucao.put("XCHGR1,(R0);", new Instrucao("00000000000111000101", "XCHG R1, (R0); "));
		instrucao.put("XCHGR1,(R1);", new Instrucao("00000000001011000100", "XCHG R1, (R1); "));
		instrucao.put("XCHGR1,(R2);", new Instrucao("00000000000010101110", "XCHG R1, (R2); "));
		instrucao.put("XCHGR1,(R3);", new Instrucao("00000000001011110011", "XCHG R1, (R3); "));
		instrucao.put("XCHGR1,(R4);", new Instrucao("00000000000101011000", "XCHG R1, (R4); "));
		instrucao.put("XCHGR1,R0;", new Instrucao("00000000001011001010", "XCHG R1, R0; "));
		instrucao.put("XCHGR1,R1;", new Instrucao("00000000001100000101", "XCHG R1, R1; "));
		instrucao.put("XCHGR1,R2;", new Instrucao("00000000000011000100", "XCHG R1, R2; "));
		instrucao.put("XCHGR1,R3;", new Instrucao("00000000000110111110", "XCHG R1, R3; "));
		instrucao.put("XCHGR1,R4;", new Instrucao("00000000000101001010", "XCHG R1, R4; "));
		instrucao.put("XCHGR2,(R0);", new Instrucao("00000000000001101100", "XCHG R2, (R0); "));
		instrucao.put("XCHGR2,(R1);", new Instrucao("00000000000011110010", "XCHG R2, (R1); "));
		instrucao.put("XCHGR2,(R2);", new Instrucao("00000000001011000011", "XCHG R2, (R2); "));
		instrucao.put("XCHGR2,(R3);", new Instrucao("00000000000110111011", "XCHG R2, (R3); "));
		instrucao.put("XCHGR2,(R4);", new Instrucao("00000000001000111010", "XCHG R2, (R4); "));
		instrucao.put("XCHGR2,R0;", new Instrucao("00000000000001001100", "XCHG R2, R0; "));
		instrucao.put("XCHGR2,R1;", new Instrucao("00000000000001111011", "XCHG R2, R1; "));
		instrucao.put("XCHGR2,R2;", new Instrucao("00000000000010100100", "XCHG R2, R2; "));
		instrucao.put("XCHGR2,R3;", new Instrucao("00000000001101010000", "XCHG R2, R3; "));
		instrucao.put("XCHGR2,R4;", new Instrucao("00000000000010001000", "XCHG R2, R4; "));
		instrucao.put("XCHGR3,(R0);", new Instrucao("00000000000000000010", "XCHG R3, (R0); "));
		instrucao.put("XCHGR3,(R1);", new Instrucao("00000000000111100001", "XCHG R3, (R1); "));
		instrucao.put("XCHGR3,(R2);", new Instrucao("00000000001001010000", "XCHG R3, (R2); "));
		instrucao.put("XCHGR3,(R3);", new Instrucao("00000000000011001110", "XCHG R3, (R3); "));
		instrucao.put("XCHGR3,(R4);", new Instrucao("00000000000001101110", "XCHG R3, (R4); "));
		instrucao.put("XCHGR3,R0;", new Instrucao("00000000000000101110", "XCHG R3, R0; "));
		instrucao.put("XCHGR3,R1;", new Instrucao("00000000000001010011", "XCHG R3, R1; "));
		instrucao.put("XCHGR3,R2;", new Instrucao("00000000001011010111", "XCHG R3, R2; "));
		instrucao.put("XCHGR3,R3;", new Instrucao("00000000001011100001", "XCHG R3, R3; "));
		instrucao.put("XCHGR3,R4;", new Instrucao("00000000001000000111", "XCHG R3, R4; "));
		instrucao.put("XCHGR4,(R0);", new Instrucao("00000000001100101111", "XCHG R4, (R0); "));
		instrucao.put("XCHGR4,(R1);", new Instrucao("00000000000110001001", "XCHG R4, (R1); "));
		instrucao.put("XCHGR4,(R2);", new Instrucao("00000000000010101111", "XCHG R4, (R2); "));
		instrucao.put("XCHGR4,(R3);", new Instrucao("00000000000111111100", "XCHG R4, (R3); "));
		instrucao.put("XCHGR4,(R4);", new Instrucao("00000000000100111000", "XCHG R4, (R4); "));
		instrucao.put("XCHGR4,R0;", new Instrucao("00000000000111000110", "XCHG R4, R0; "));
		instrucao.put("XCHGR4,R1;", new Instrucao("00000000001001101011", "XCHG R4, R1; "));
		instrucao.put("XCHGR4,R2;", new Instrucao("00000000001010001110", "XCHG R4, R2; "));
		instrucao.put("XCHGR4,R3;", new Instrucao("00000000000010111010", "XCHG R4, R3; "));
		instrucao.put("XCHGR4,R4;", new Instrucao("00000000000001101011", "XCHG R4, R4; "));
		instrucao.put("HALT;", new Instrucao("11111111111111111111", "HALT; "));
	}
}

class Codigo{
	private String instrucao;
	private Integer valor;
	private String desvio;
	
	public Codigo(String codigo, String desvio){
		this.instrucao = codigo;
		this.valor = null;
		this.desvio = desvio;
	}	
	
	public Codigo(String codigo, Integer valor){
		this.instrucao = codigo;
		this.valor = valor;
		this.desvio = null;
	}

	public String getInstrucao() {
		return this.instrucao;
	}

	public Integer getValor() {
		return this.valor;
	}
	
	public String getDesvio() {
		return this.desvio;
	}	
}
